package com.springcloud.util;

import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.dom4j.DocumentHelper;
import org.springframework.boot.context.ApplicationPidFileWriter;
import org.xml.sax.InputSource;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.io.Writer;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @Description: TODO
 * @Create by: 123
 * @Date: 2021/11/15 20:01
 */


public class PdfGenerate {

    public static final String TEMPLATE_DIR="F:\\me\\workspace2\\stucloud\\cloud-provider\\src\\main\\resources";

    public static String getXml(String templateDir,String templateName,Map<String,Object> dataMap) throws IOException, TemplateException {
        // 第一步：创建一个Configuration对象，直接new一个对象。构造方法的参数就是freemarker对于的版本号。
        Configuration configuration = new Configuration(Configuration.getVersion());
        // 第二步：设置模板文件所在的路径。
        configuration.setDirectoryForTemplateLoading(new File(templateDir));
        // 第三步：设置模板文件使用的字符集。一般就是utf-8.
        configuration.setDefaultEncoding("utf-8");
        // 第四步：加载一个模板，创建一个模板对象。
        Template template = configuration.getTemplate(templateName);
        // 第五步：创建一个模板使用的数据集，可以是pojo也可以是map。一般是Map。
        Map<String, Object> dataModel = new HashMap<>();
        //向数据集中添加数据
        if(dataMap!=null){
            for (Map.Entry<String, Object> entry : dataMap.entrySet()) {
                dataModel.put(entry.getKey(),entry.getValue());
            }
        }
        ByteOutputStream outputStream = new ByteOutputStream();
        // 第六步：创建一个Writer对象，一般创建一FileWriter对象，指定生成的文件名。
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream,"utf-8"));
        // 第七步：调用模板对象的process方法输出文件。
        template.process(dataModel,writer );
        // 第八步：关闭流。
        writer.close();
        return new String(outputStream.getBytes(),"utf-8");
    }

    public static void main(String[] args) throws Exception {
       /* Document document = new Document(PageSize.A6);
        PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("d.pdf"));
        pdfWriter.setPdfVersion(PdfWriter.VERSION_1_7);
        document.open();
        document.add(new Paragraph("Hello world!!!"));
        document.close();*/


        String xml = getXml(TEMPLATE_DIR, "pick.ftl", null);

        System.out.println(xml);

        byte[] parse = new PdfGenerateTool().parse(xml);


        FileOutputStream fileOutputStream = new FileOutputStream("f1.pdf");

        fileOutputStream.write(parse);
        fileOutputStream.close();
    }
}




